/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fondo.Controlador;
import fondo.Modelos.Funcionario;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author dell
 */
public class ControlFuncionario{
    
       public static Funcionario load(ResultSet rs) throws SQLException{
            Funcionario f=new Funcionario();
            //Persona
            f.setIdentificacion(rs.getString(1));
            f.setTipo_documento(rs.getString(2));
            f.setPri_Nombre(rs.getString(3));
            f.setSeg_Nombre(rs.getString(4));
            f.setPri_Apellido(rs.getString(5));
            f.setSeg_Apellido(rs.getString(6));
            f.setFecha_nacimiento(rs.getDate(7));
            f.setLugarNacimiento(rs.getString(8));
            f.setSexo(rs.getString(9));
            f.setDireccion(rs.getString(10));
            //Funcionario
            f.setTelefono_casa(rs.getString(11));
            f.setTelefono_oficina(rs.getString(12));
            f.setCelular(rs.getString(13));
            f.setEstado_civil(rs.getString(14));
            f.setArp(rs.getString(15));
            f.setEps(rs.getString(16));
            f.setNumero_hijos(rs.getInt(17));
            f.setNivel_escolaridad(rs.getString(18));
            f.setEstrato(rs.getString(19));
            f.setSalario_Basico(rs.getDouble(20));
            f.setPrograma_dependencia(rs.getString(21));
            f.setCorreo(rs.getString(22));
            f.setFecha_ingreso(rs.getDate(23));
            f.setPorcentaje(rs.getString(24));
            f.setCuota_afiliacion(rs.getDouble(25));
            return f;
    }   
       private static List personas;
       public static Connection con;
       
       public static void RegistrarFuncionario(Funcionario p) throws SQLException, IOException, Exception {
        ManejadorBaseDatos mbd = ManejadorBaseDatos.getInstancia();
        mbd.conectar();
        con = mbd.getConexion();
        if (con == null) {
            throw new SQLException(" no hay conexion ");
        }
        PreparedStatement pst = null;

        try {

            pst = con.prepareStatement("Insert Into funcionario values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
            //Persona
            pst.setString(1, p.getIdentificacion());
            pst.setString(2, p.getTipo_documento());
            pst.setString(3, p.getPri_Nombre());
            pst.setString(4, p.getSeg_Nombre());
            pst.setString(5, p.getPri_Apellido());
            pst.setString(6, p.getSeg_Apellido());
            java.sql.Date fechas1 = new java.sql.Date(p.getFecha_nacimiento().getTime());     
            pst.setDate(7, fechas1);
            pst.setString(8, p.getLugarNacimiento());
            pst.setString(9, p.getSexo());
            pst.setString(10, p.getDireccion());
            //Funcionario
            pst.setString(11, p.getTelefono_casa());
            pst.setString(12, p.getTelefono_oficina());
            pst.setString(13, p.getCelular());
            pst.setString(14, p.getEstado_civil());
            pst.setString(15, p.getArp());
            pst.setString(16, p.getEps());
            pst.setInt(17, p.getNumero_hijos());
            pst.setString(18, p.getNivel_escolaridad());
            pst.setString(19, p.getEstrato());
            pst.setDouble(20, p.getSalario_Basico());
            pst.setString(21, p.getPrograma_dependencia());
            pst.setString(22, p.getCorreo());
            java.sql.Date fechas2 = new java.sql.Date(p.getFecha_ingreso().getTime());
            pst.setDate(23, fechas2);
            pst.setString(24, p.getPorcentaje());
            pst.setDouble(25, p.getCuota_afiliacion());
            pst.executeUpdate();
        } finally {
            if (pst != null) {
                pst.close();
            }
        }
    }
        public static Funcionario BuscarFuncionario(String ide) throws SQLException{
            if (ide == null) {
          throw new SQLException("No hay elemento clave de la clase funcionario");
        }
         ResultSet rs = null;
         PreparedStatement pst = null;
         Funcionario p = null;
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
         pst = con.prepareStatement("select * from funcionario where identificacion = ?");
         pst.setString(1, ide.trim());

         rs = pst.executeQuery();
         while(rs.next()) {
             p = load(rs);
         }
    } finally {
         if (rs != null) {
            rs.close();
         }
         if (pst != null) {
           pst.close();
         }
          return p;
    }
    }

        
  public static Funcionario BuscarFuncionarioNombre(String nom) throws SQLException{
            if (nom == null) {
          throw new SQLException("No hay elemento clave de la clase funcionario");
        }
         ResultSet rs = null;
         PreparedStatement pst = null;
         Funcionario p = null;
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
         pst = con.prepareStatement("select * from funcionario where nombre = ?");
         pst.setString(1, nom.trim());

         rs = pst.executeQuery();
         while(rs.next()) {
             p = load(rs);
         }
    } finally {
         if (rs != null) {
            rs.close();
         }
         if (pst != null) {
           pst.close();
         }
          return p;
    }
    }
  
 public static void ModificarFuncionario(Funcionario p, String ide) throws SQLException, Exception {
        if (BuscarFuncionario(ide) == null) {
            throw new SQLException("funcionario no registrado ");
        }
        PreparedStatement pst = null;

        try {
            ManejadorBaseDatos mbd = ManejadorBaseDatos.getInstancia();
            mbd.conectar();
            con = mbd.getConexion();
            pst = con.prepareStatement("Update funcionario set identificacion = ?, nombre = ?, apellido = ?, direccion = ?, telefono = ?, arp = ?, eps = ?, correo = ?, estado = ? where identificacion = ?" );
            pst.setString(1, p.getIdentificacion());
            pst.setString(2, p.getTipo_documento());
            pst.setString(3, p.getPri_Nombre());
            pst.setString(4, p.getSeg_Nombre());
            pst.setString(5, p.getPri_Apellido());
            pst.setString(6, p.getSeg_Apellido());
            java.sql.Date fechas1 = new java.sql.Date(p.getFecha_nacimiento().getTime());     
            pst.setDate(7, fechas1);
            pst.setString(8, p.getLugarNacimiento());
            pst.setString(9, p.getSexo());
            pst.setString(10, p.getDireccion());
            //Funcionario
            pst.setString(11, p.getTelefono_casa());
            pst.setString(12, p.getTelefono_oficina());
            pst.setString(13, p.getCelular());
            pst.setString(14, p.getEstado_civil());
            pst.setString(15, p.getArp());
            pst.setString(16, p.getEps());
            pst.setInt(17, p.getNumero_hijos());
            pst.setString(18, p.getNivel_escolaridad());
            pst.setString(19, p.getEstrato());
            pst.setDouble(20, p.getSalario_Basico());
            pst.setString(21, p.getPrograma_dependencia());
            pst.setString(22, p.getCorreo());
            java.sql.Date fechas2 = new java.sql.Date(p.getFecha_ingreso().getTime());
            pst.setDate(23, fechas2);
            pst.setString(24, p.getPorcentaje());
            pst.setDouble(25, p.getCuota_afiliacion());
            pst.setString(26, ide);
            pst.executeUpdate();

        } finally {
            if (pst != null) {
                pst.close();
            }
        }

    }

  public static void listarFuncionario() throws SQLException, Exception {
     ResultSet rs = null;
     PreparedStatement pst = null;
     personas = new LinkedList();
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
        pst = con.prepareStatement("select * from funcionario ");
        rs = pst.executeQuery();
        while(rs.next()) {
           personas.add(load(rs));
        }
    } finally {
        if (rs != null) {
           rs.close();
       }
        if (pst != null) {
          pst.close();
       }
}
}
  
  public static boolean ExistePersona(int ide){
        boolean existe=false;

        return existe;
    }

  public static void EliminarFuncionario(String ide) throws SQLException, Exception {
        if (BuscarFuncionario(ide) == null) {
            throw new SQLException("No hay elemento clave de la clase funcionario");
        }
        PreparedStatement pst = null;

        try {
            ManejadorBaseDatos mbd = ManejadorBaseDatos.getInstancia();
            mbd.conectar();
            con = mbd.getConexion();
            pst = con.prepareStatement("delete from funcionario where identificacion = ?");
            pst.setString(1, ide.trim());
            pst.executeUpdate();

        } finally {
            if (pst != null) {
                pst.close();
            }
        }

    }
  
  public static void setPersona(List aPersona) {
        personas = aPersona;
    }
  public static List getPersona() {
        return personas;
    }


}
